/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package pck_com.pck_rrhh.pck_webservices;

/**
 *
 * @author Christian
 */
import com.tramitedocu.enums.TipoConectividadEnum;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import pck_com.pck_rrhh.pck_src.pck_pojos.Cls_Encargatura_Permiso;
import pck_com.pck_rrhh.pck_src.pck_pojos.Cls_xml_data;
import pck_com.pck_rrhh.pck_src.pck_services.TablasService;
import pck_com.pck_rrhh.pck_utiles.Cls_Funciones;
import pck_com.pck_rrhh.pck_utiles.Cls_Parametros;

/**
 *
 * @author mx
 */
@Component
@Path("/Tablas/{tipo_operacion}/{parametro}")
public class TablasWS {

    @Autowired//Me Permite Injectar la Dependencia de Spring
    TablasService tablaService;

    public static TipoConectividadEnum estadoConectividad = TipoConectividadEnum.CON_ACCESO_BD;

    @GET
    @Produces(MediaType.APPLICATION_XML)
    public Object generarWebService(@PathParam("tipo_operacion") String tipo_consulta,
            @PathParam("parametro") String param) {
        try {
            switch (new Integer(tipo_consulta)) {
                case Cls_Parametros.Profesion_NUEVA_PROFESION:
                    return nuevaProfesion(param);
                case Cls_Parametros.Profesion_OBTENER_TODAS_PROFESIONES:
                    return obtenerTodasProfesiones(param);
                case Cls_Parametros.Profesion_MODIFICAR_PROFESION:
                    return modificarProfesion(param);
                case Cls_Parametros.Profesion_OBTENER_PROFESION:
                    return obtenerProfesion(param);
                case Cls_Parametros.Tablas_ASIGNAR_PROFESION_TRABAJADOR:
                    return asignarProfesionTrabajador(param);
                case Cls_Parametros.Tablas_DAR_VACACIONES_TRABAJADOR:
                    return darVacacionesTrabajador(param);
                case Cls_Parametros.Tablas_QUITAR_VACACIONES_TRABAJADOR:
                    return quitarVacacionesTrabajador(param);
                case Cls_Parametros.Tablas_ACTUALIZAR_UNIDAD_ORGANIZATIVA:
                    return actualizarUnidadOrganizativa(param);
                case Cls_Parametros.Tablas_ASIGNAR_ENCARGADO:
                    return asignarEncargado(param);
                case Cls_Parametros.tablas_LISTAR_PERMISOS:
                    return obtenerTodosPermisos(param);
                case Cls_Parametros.tablas_ASIGNAR_ENCARGADO_HISTORIAL:
                    return asignarEncargadoHistorial(param);
                case Cls_Parametros.tablas_MODIFICAR_PERMISO:
                    return modificarPermiso(param);
                case Cls_Parametros.tablas_NUEVO_PERMISO:
                    return NuevoPermiso(param);
                case Cls_Parametros.tablas_ACTUALIZAR_ENCARGATURA:
                    return actualizarEncargatura(param);
                case Cls_Parametros.tablas_OBTENER_ENCARGATURA:
                    return obtenerEncargatura(param);
                case Cls_Parametros.tablas_ELIMINAR_PERMISO:
                    return eliminarPermiso(param);
                default:
                    return "";
            }
        } catch (NumberFormatException ex) {
            return null;
        } catch (ArrayIndexOutOfBoundsException ex) {
            return null;
        }
    }

    private Cls_xml_data obtenerTodasProfesiones(String param) {
        Cls_xml_data json_data = new Cls_xml_data();
        String datos_recibidos[] = param.split("-");
        String parametrosParaService_01[] = {Cls_Parametros.Map_FILTRO_NOMBRE, "%" + datos_recibidos[0] + "%"};
        String parametrosParaService_02[] = {Cls_Parametros.Map_PAGE, datos_recibidos[1]};
        String parametrosParaService_03[] = {Cls_Parametros.Map_PAGE_TAMANIO, datos_recibidos[2]};
        json_data.setArray_profesion(tablaService.obtenerTodasProfesiones(Cls_Funciones.generarHashMapParaSolicitud(parametrosParaService_01, parametrosParaService_02, parametrosParaService_03)));
        return json_data;
    }

    private Object nuevaProfesion(String param) {
        String datos_recibidos[] = param.split("-");
        String parametrosParaService_01[] = {Cls_Parametros.Map_PROFESION, datos_recibidos[0]};
        String parametrosParaService_02[] = {Cls_Parametros.Map_ABREVIATURA, datos_recibidos[1]};
        String retorno = tablaService.nuevaProfesion(Cls_Funciones.generarHashMapParaSolicitud(parametrosParaService_01, parametrosParaService_02));
        return new Cls_xml_data(retorno == null ? Cls_Parametros.Mensajes_ERROR_CONEXION : retorno);
    }

    private Object modificarProfesion(String param) {
        String datos_recibidos[] = param.split("-");
        String parametrosParaService_01[] = {Cls_Parametros.Map_CODIGO_PROFESION, datos_recibidos[0]};
        String parametrosParaService_02[] = {Cls_Parametros.Map_PROFESION, datos_recibidos[1]};
        String parametrosParaService_03[] = {Cls_Parametros.Map_ABREVIATURA, datos_recibidos[2]};
        String retorno = tablaService.modificarProfesion(Cls_Funciones.generarHashMapParaSolicitud(parametrosParaService_01, parametrosParaService_02, parametrosParaService_03));
        return new Cls_xml_data(retorno == null ? Cls_Parametros.Mensajes_ERROR_CONEXION : retorno);
    }

    private Cls_xml_data obtenerProfesion(String param) {
        String parametrosParaService_01[] = {Cls_Parametros.Map_CODIGO_PROFESION, param};
        return new Cls_xml_data(tablaService.obtenerProfesion(Cls_Funciones.generarHashMapParaSolicitud(parametrosParaService_01)));
    }

    private Object asignarProfesionTrabajador(String param) {
        String datos_recibidos[] = param.split("-");
        String parametrosParaService_01[] = {Cls_Parametros.Map_DNI, datos_recibidos[0]};
        String parametrosParaService_02[] = {Cls_Parametros.Map_CODIGO_PROFESION, datos_recibidos[1]};
        String retorno = tablaService.asignarProfesionTrabajador(Cls_Funciones.generarHashMapParaSolicitud(parametrosParaService_01, parametrosParaService_02));
        return new Cls_xml_data(retorno == null ? Cls_Parametros.Mensajes_ERROR_CONEXION : retorno);
    }

    private Object darVacacionesTrabajador(String param) {
        String parametrosParaService_01[] = {Cls_Parametros.Map_DNI, param};
        return new Cls_xml_data(tablaService.darVacacionesTrabajador(Cls_Funciones.generarHashMapParaSolicitud(parametrosParaService_01)));
    }

    private Object quitarVacacionesTrabajador(String param) {
        String parametrosParaService_01[] = {Cls_Parametros.Map_DNI, param};
        return new Cls_xml_data(tablaService.quitarVacacionesTrabajador(Cls_Funciones.generarHashMapParaSolicitud(parametrosParaService_01)));
    }

    private Object actualizarUnidadOrganizativa(String param) {
        String datos_recibidos[] = param.split("-");
        String parametrosParaService_01[] = {Cls_Parametros.Map_CODIGO_UNIDAD_ORGANICA, datos_recibidos[0]};
        String parametrosParaService_02[] = {Cls_Parametros.Map_CORREO, datos_recibidos[1]};
        String parametrosParaService_03[] = {Cls_Parametros.Map_CODIGO_DIRECTIVA, datos_recibidos[2]};
        String retorno = tablaService.actualizarUnidadOrganizativa(Cls_Funciones.generarHashMapParaSolicitud(parametrosParaService_01, parametrosParaService_02, parametrosParaService_03));
        return new Cls_xml_data(retorno == null ? Cls_Parametros.Mensajes_ERROR_CONEXION : retorno);
    }

    private Object asignarEncargado(String param) {
        String datos_recibidos[] = param.split("-");
        String parametrosParaService_01[] = {Cls_Parametros.Map_DNI_ENCARGADO, datos_recibidos[0]};
        String parametrosParaService_02[] = {Cls_Parametros.Map_CODIGO_UNIDAD_ORGANICA, datos_recibidos[1]};
        String retorno = tablaService.asignarEncargado(Cls_Funciones.generarHashMapParaSolicitud(parametrosParaService_01, parametrosParaService_02));
        return new Cls_xml_data(retorno == null ? Cls_Parametros.Mensajes_ERROR_CONEXION : retorno);
    }

    private Cls_xml_data obtenerTodosPermisos(String param) {
        if (param.equals("dsgsdfgfdgsgagsgfdsdsfdgsdgdgdsg")) {
            param = "";
        }
        Cls_xml_data json_data = new Cls_xml_data();
        String parametrosParaService_01[] = {Cls_Parametros.Map_FILTRO_NOMBRE, "%" + param + "%"};
        json_data.setArray_permiso(tablaService.obtenerTodosTipoPermiso(Cls_Funciones.generarHashMapParaSolicitud(parametrosParaService_01)));
        return json_data;
    }

    private Object asignarEncargadoHistorial(String param) {
        String datos_recibidos[] = param.split("-");
        String parametrosParaService_01[] = {Cls_Parametros.Map_ID_PERMISO, datos_recibidos[0]};
        String parametrosParaService_02[] = {Cls_Parametros.Map_CODIGO_UNI_ORGA, datos_recibidos[1]};
        String parametrosParaService_03[] = {Cls_Parametros.Map_DNI_ENCARGAD, datos_recibidos[2]};
        String parametrosParaService_04[] = {Cls_Parametros.Map_DNI_RESPONSABLE, datos_recibidos[3]};
        String parametrosParaService_05[] = {Cls_Parametros.Map_FECHA_INICIO, datos_recibidos[4]};
        String parametrosParaService_06[] = {Cls_Parametros.Map_FECHA_FIN, datos_recibidos[5]};
        String parametrosParaService_07[] = {Cls_Parametros.Map_ESTADO, datos_recibidos[6]};
        String retorno = tablaService.asignarEncardadoHistorial(Cls_Funciones.generarHashMapParaSolicitud(parametrosParaService_01,
                parametrosParaService_02, parametrosParaService_03, parametrosParaService_04,
                parametrosParaService_05, parametrosParaService_06, parametrosParaService_07));
        return new Cls_xml_data(retorno == null ? Cls_Parametros.Mensajes_ERROR_CONEXION : retorno);
    }

    private Object modificarPermiso(String param) {
        String datos_recibidos[] = param.split("-");
        String parametrosParaService_01[] = {Cls_Parametros.Map_ID_PERMISO, datos_recibidos[0]};
        String parametrosParaService_02[] = {Cls_Parametros.Map_DESCRIPCION_PERMISO, datos_recibidos[1]};
        String retorno = tablaService.modificarPermiso(Cls_Funciones.generarHashMapParaSolicitud(parametrosParaService_01, parametrosParaService_02));
        return new Cls_xml_data(retorno == null ? Cls_Parametros.Mensajes_ERROR_CONEXION : retorno);
    }

    private Object NuevoPermiso(String param) {
        String parametrosParaService_01[] = {Cls_Parametros.Map_DESCRIPCION_PERMISO, param};
        String retorno = tablaService.nuevoPermiso(Cls_Funciones.generarHashMapParaSolicitud(parametrosParaService_01));
        return new Cls_xml_data(retorno == null ? Cls_Parametros.Mensajes_ERROR_CONEXION : retorno);
    }

    private Object eliminarPermiso(String param) {
        String parametrosParaService_01[] = {Cls_Parametros.Map_ID_PERMISO, param};
        String retorno = tablaService.eliminarPermiso(Cls_Funciones.generarHashMapParaSolicitud(parametrosParaService_01));
        return new Cls_xml_data(retorno == null ? Cls_Parametros.Mensajes_ERROR_CONEXION : retorno);
    }

    private Object actualizarEncargatura(String param) {
        String parametrosParaService_01[] = {Cls_Parametros.Map_ID_ENCARGATURA, param};
        String retorno = tablaService.actualizarEncargatura(Cls_Funciones.generarHashMapParaSolicitud(parametrosParaService_01));
        return new Cls_xml_data(retorno == null ? Cls_Parametros.Mensajes_ERROR_CONEXION : retorno);
    }

    private Object obtenerEncargatura(String param) {
        String parametrosParaService_01[] = {Cls_Parametros.Map_CODIGO_UNIDAD_ORGANICA, param};
        try {
            Cls_Encargatura_Permiso encargatura = tablaService.obtenerEncargatura(
                    Cls_Funciones.generarHashMapParaSolicitud(parametrosParaService_01));
            Cls_xml_data data = new Cls_xml_data(encargatura == null ? Cls_Parametros.Mensajes_ERROR_CONEXION : encargatura);
            return data;
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("catch");
            return null;
        }
    }
}
